package com.rw.coco.api.data.persistence.simple;

import com.rw.coco.api.data.model.AccountModel;
import com.rw.coco.api.data.persistence.AccountMapper;

import java.util.List;

/**
 * 简单实现AccountMapper类
 * 注意，如果实现这个类，则不保证调用原子性
 */
public abstract class SimpleAccountMapper implements AccountMapper, BaseSimpleMapper<AccountModel> {
    /**
     * 获取用户信息，如果没有，则返回默认
     * 注意，返回默认的同时，请将这个默认值入库
     *
     * @param id           用户的ID
     * @param defaultModel 默认的用户
     */
    @Override
    public AccountModel getAccountOrPut(String id, AccountModel defaultModel) {
        AccountModel account = getAccount(id);
        if (account == null) {
            insert(defaultModel);
            return defaultModel;
        } else {
            return account;
        }
    }

    /**
     * 变更用户原本的名称
     *
     * @param id       用户的ID
     * @param realName 用户原本的名称
     */
    @Override
    public void setRealName(String id, String realName) {
        AccountModel updateModel = new AccountModel();
        updateModel.setAccountId(id);
        updateModel.setRealName(realName);
        update(updateModel);
    }

    /**
     * 获取用户信息
     *
     * @param id 用户的ID
     */
    @Override
    public AccountModel getAccount(String id) {
        return selectOne(id);
    }

    /**
     * 批量获取用户信息
     *
     * @param idList 用户的ID列表
     */
    @Override
    public List<AccountModel> getAccountList(List<String> idList) {
        return selectList(idList);
    }

    /**
     * 操作一个用户变为黑、白名单
     *
     * @param id       用户ID
     * @param blackOff 是否黑名单
     */
    @Override
    public void blackOrWhiteAccount(String id, boolean blackOff) {
        AccountModel updateModel = new AccountModel();
        updateModel.setAccountId(id);
        updateModel.setBlackList(blackOff);
        update(updateModel);
    }

    /**
     * 设置用户的开头字符
     *
     * @param id         用户的ID
     * @param customChar 自定义字符
     */
    @Override
    public void setCustomChar(String id, String customChar) {
        AccountModel updateModel = new AccountModel();
        updateModel.setAccountId(id);
        updateModel.setCustomChar(customChar);
        update(updateModel);
    }

    /**
     * 变更用户的使用角色
     *
     * @param id          用户的ID
     * @param characterId 角色ID
     */
    @Override
    public void setCharacter(String id, int characterId) {
        AccountModel updateModel = new AccountModel();
        updateModel.setAccountId(id);
        updateModel.setCharacterId(characterId);
        update(updateModel);
    }
}
